#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>


//sizeof和strlen
//sizeof是一个单目操作符，并不是函数,计算的是变量所占内存空间的大小，单位是字节
//如果操作数是类型的话，计算的就是使用类型创建的变量所占内存空间的大小
//sizeof只关心内存空间的大小，并不在乎内存中存放上面数据



//int main()
//{
//	int a = 10;
//	
//	printf("%zd\n", sizeof(a));
//	printf("%zd\n", sizeof a);//如果操作数是变量，可以不用带括号，也侧面证明了，sizeof是操作符而不是函数
//	printf("%zd\n", sizeof(int));
//
//	return 0;
//}


//strlen是c语言库函数，包含在头文件string.h下，功能是求字符串长度
//函数原型是
//size_t strlen (cont char* str);
//统计的是从strlen函数的参数str这个地址开始向后,\0之前字符串中字符的个数
//strlen函数会一直向后找\0字符，知道找到为止，所以可能存在越界查找

//int main()
//{
//	char arr1[3] = { 'a', 'b', 'c' };
//	char arr2[] = "abc";
//
//	printf("%zd\n", strlen(arr1));//随机
//	printf("%zd\n", strlen(arr2));//3
//
//	printf("%zd\n", sizeof(arr1));
//	printf("%zd\n", sizeof(arr2));
//	return 0;
//}


//对比
//sizeof                                             strlen
//1.sizeof是操作符                                 1.strlen是库函数，使用需要包含头文件<string.h>
//2.sizeof计算操作数所占内存的大小，单位是字节         2.strlen是求字符串长度的，统计的是\0之前的字符的个数                              
//3.并不关注内存中存放的什么数据                      3.关注内存中是否有\0，如果没有\0，就会持续往后找，可能会越界
//4.括号内有表达式，不参与运算


//int main()
//{
//	int a = 2;
//	short s = 4;
//	printf("%zd\n", sizeof(s = a + 2));
//	printf("%d\n", s);
//	return 0;
//}

